There is always a need for testing the design of a product, such as an electronic device, software program, etc., to verify that the product consistently performs its intended function before it is offered for sale. Briefly, testing a new design may be thought of as performing a matrix of experiments consisting of a set of independent parameters whose levels or values are changed from one experiment to the next and recording the results. The results are then analyzed to verify the effectiveness of the particular design. In the past, the test factors and levels required to adequately test a particular product were devised by the designer, relying solely on his/her knowledge of the specific design and its resulting behavior. However, as a result of electronic devices and software programs becoming more complex, the task of devising such test factors and the values that each factor should employ as well as which combinations thereof to use has become increasingly difficult. Accordingly, the testing phase of a product now consumes approximately 30-40% of the total development effort and is, therefore, becoming a significant cost component in the price of such devices and software.
To address this problem, designers are now employing different methods to help simplify the generation of test patterns (cases). One such method employs what is commonly referred to as orthogonal arrays. Orthogonal arrays, also known as Latin Squares, have been used one way or another since the days of Euler, and, more recently, have proved to be effective in generating test cases for testing software down to a fault level of, for example, two faults per million lines of code.
To use orthogonal arrays, a designer maps, for example, a software command, into a 2-tuple (matrix) defining the number of factors (parameters) for the command and the number of levels associated with each factor. The designer then manually searches through a library of orthogonal arrays to hopefully match the 2-tuple with an optimal orthogonal array. Therein lies the problem, since it is often the case that the designer may not recognize which one of the orthogonal arrays optimally covers the 2-tuple. As a result, the designer may end up selecting an inefficient array, rather than the array that is optimally suited for generating the desired test cases.